package com.manage.generator.controller;

import com.manage.common.annotation.Anonymous;
import com.manage.common.core.controller.BaseController;
import com.manage.common.core.domain.AjaxResult;
import com.manage.common.core.page.TableDataInfo;
import com.manage.common.exception.ServiceException;
import com.manage.common.utils.StringUtils;
import com.manage.generator.domain.GenTemplate;
import com.manage.generator.service.GenTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 模板生成接口
 *
 * @author smallv
 */
@RestController
@RequestMapping("/tool/gen/template")
public class GenTemplateController extends BaseController {
    private final GenTemplateService templateService;

    @Autowired
    public GenTemplateController(GenTemplateService templateService) {
        this.templateService = templateService;
    }

    /**
     * 查询默认模板，或者指定用户模板
     *
     * @param codeTemplate 查询参数
     * @return 查询结果
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:list')")
    @GetMapping("/template")
    public TableDataInfo findAllTemplate(GenTemplate codeTemplate) {
        startPage();
        return getDataTable(templateService.selectTemplateList(codeTemplate));
    }

    /**
     * 保存模板
     *
     * @param po 模板
     * @return 保存数量
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:add')")
    @PostMapping("/template/add")
    public AjaxResult insertTemplate(@RequestBody GenTemplate po) {
        if (!templateService.checkTemplateNameUnique(po)) {
            return AjaxResult.error("新增模板'" + po.getName() + "'失败，模板名称已存在");
        }
        return AjaxResult.success(templateService.insertTemplate(po));
    }

    /**
     * 编辑模板
     *
     * @param po 模板
     * @return 编辑结果
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:edit')")
    @PutMapping("/template/update")
    public AjaxResult updateTemplate(@RequestBody GenTemplate po) {
        if (!templateService.checkTemplateNameUnique(po)) {
            return AjaxResult.error("编辑模板'" + po.getName() + "'失败，模板名称已存在");
        }
        return AjaxResult.success(templateService.updateTemplate(po));
    }

    /**
     * 删除模板
     *
     * @param ids 要删除的ids
     * @return 删除结果
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:remove')")
    @DeleteMapping("/template/delete/{ids}")
    public AjaxResult deleteTemplateById(@PathVariable String ids) {
        int count = 0;
        if (!StringUtils.isEmpty(ids)) {
            String[] split = ids.split(",");
            for (String i : split) {
                count += templateService.deleteTemplateById(Long.parseLong(i));
            }
        }
        return AjaxResult.success(count);
    }

    /**
     * 预览代码（根据未保存的模板文件）
     *
     * @param templateList 模板集合
     * @return 代码生成结果
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:preview')")
    @Anonymous
    @PostMapping("/template/preview")
    public AjaxResult preview(@RequestBody List<GenTemplate> templateList) {
        return AjaxResult.success(templateService.previewCode(templateList));
    }

    /**
     * 保存模板参数
     *
     * @param template 模板
     * @return 查询结果
     */
    @PreAuthorize("@ss.hasPermi('tool:gen:template:params')")
    @PostMapping("/template/param")
    public AjaxResult saveTemplateParams(@RequestBody GenTemplate template) {
        if (template.getId() == null) {
            throw new ServiceException("模板id不能为空");
        }
        return AjaxResult.success(templateService.saveTemplateParams(template));
    }

}